<?php

	require_once 'Validate.php';
	require_once './view/RegisterView.php';
	
	class RegisterHandler {
				
		private $db;
		
		public function __construct(Database $db) {
			$this->db = $db;
		}
		
		public $error ="";
		
		public function RegisterUser($userName, $passWord) {
			
			if ($this->ValidateUser($userName, $passWord) == true) {
							
				//Kallar på prepare och insert i db och skickar med en sql-fråga.
				$encrypted_password = md5($passWord);
				$sql = "INSERT INTO user (Username, Password) VALUES (?, ?)";
				$stmt = $this->db->Prepare($sql);
				$stmt->bind_param('ss', $userName, $encrypted_password);
				$query = $this->db->Insert($stmt);
				
				return true;
			}		
		}

		public function ValidateUser($userName, $passWord) {
			
			$val = new Validate();
			$view = new RegisterView();
			
			$query = "SELECT Username FROM user WHERE Username = ?";
			$stmt = $this->db->Prepare($query);
			$stmt->bind_param('s', $userName);		
			$stmt = $this->db->ExecuteIt($stmt);
			
			$stmt->store_result();
			$rows = $stmt->num_rows;
			$stmt->close();
							
			//Kollar om användarnamnet redan finns i databasen.
			if ($rows > 0) {
				$this->error = $view->UsernameExists();
				return false;
			}
			//Kollar i validate-klassen om lösenordet stämmer.
			if ($val->Password($passWord) == false) {
				$this->error = $view->ShortPassword();
				return false;
			}			
			//Kollar så att inte användarnamnet är null.
			else if ($userName == null) {
				$this->error = $view->NoUsername();
				return false;
			}
			else {
				return true;
			}
		}
		
		public function DeleteUser($userName) {
						
			//Kallar på delete i databasen och skickar med en sql-fråga.
			$sql = "DELETE FROM user WHERE Username = ?";
			$stmt = $this->db->Prepare($sql);
			$stmt->bind_param('s', $userName);
			$query = $this->db->Delete($stmt);
		}
				
		public function Test() {
			
			//Läsenord minimilängd 8 tecken.
			if ($this->RegisterUser("Användare", "kort") == true) {
				echo "Password too short.";
				return false;
			}
			
			//Inget tomt användarnamn
			if ($this->RegisterUser("", "Lösenordet2") == true) { 
				echo "Username is empty.";
				return false;
			}
			
			//Ett användarnamn som redan finns.
			if ($this->RegisterUser("Sofia", "Lösenordet1") == true) {
				echo "Username already exists.";
				return false;
			}
			
			return true;
		}
	}
